﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using PMSGSC.BLL;
using PMSGSC.DAL;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Localization;

namespace PMSGSC.App
{
    public partial class frmCertificateType : DevExpress.XtraEditors.XtraForm
    {
        public frmCertificateType()
        {
            InitializeComponent();
            typeCertificateBindingSource.DataSource = CertificateType_BLL.GetAll(frmMain.ship.Ship_ID);
        }
        // Khai báo trạng thái mặc định 
        private Status status = Status.Update;
        // Tạo một đối tượng lưu trữ các thông tin trên View ==> truyền xuống các layer bên dưới
        private TypeCertificate certificateType = new TypeCertificate();
        //Hiển thị số thứ tự của gridview
        private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {

            if (e.RowHandle >= 0)
            {
                e.Info.DisplayText = (e.RowHandle + 1).ToString();
            }
        }
        // Sự kiện cập nhật dữ liệu xuống databse
        private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            SaveDataToDatabase();
        }

        private void SaveDataToDatabase()
        {
            certificateType = typeCertificateBindingSource.Current as TypeCertificate;
            if (status == Status.Update)
            {
                if (XtraMessageBox.Show("Do you want to save changes?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    bool result = CertificateType_BLL.Update(certificateType);
                    if (!result)
                        XtraMessageBox.Show("Update Unsuccess !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    else
                        XtraMessageBox.Show("Update Success !", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }              
            }
            if (status == Status.New)
            {
                bool result = CertificateType_BLL.Insert(certificateType);
                if (!result)
                {
                    XtraMessageBox.Show("Insert Unsuccess!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                status = Status.Update;
            }
            typeCertificateBindingSource.DataSource = CertificateType_BLL.GetAll(frmMain.ship.Ship_ID);
        }

       
        private void DeleteDocument(NavigatorButtonClickEventArgs e)
        {
            DeleteCertificateFinal();
            e.Handled = true;
        }

        private void DeleteCertificateFinal()
        {
            if (XtraMessageBox.Show("Are you sure you want to delete a Certificate Type?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                certificateType = typeCertificateBindingSource.Current as TypeCertificate;

                if (CertificateType_BLL.IsRelationship(certificateType))
                    CertificateType_BLL.Delete(certificateType);
                else
                    XtraMessageBox.Show("Can't Delete", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                typeCertificateBindingSource.DataSource = CertificateType_BLL.GetAll(frmMain.ship.Ship_ID);
            }

        }
        // Sự kiện nhân phím delete sảy ra
        private void gridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                DeleteCertificateFinal();
            }
        }
        // Khởi tạo giá trị mặc định của ô cần ràng buộc
        private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
        {
            status = Status.New;
        }
        // Kiểm tra ràng buộc của dữ liệu người dùng nhập vào
        private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            GridView view = (GridView)sender;
            GridColumn ColDocumentName = view.Columns["NameType"];
            if (null == view.GetRowCellValue(e.RowHandle, ColDocumentName))
            {
                e.Valid = false;
                view.FocusedColumn = view.Columns["NameType"];
                e.ErrorText = "Please enter the Certificate Name. ";
                view.SetColumnError(ColDocumentName, "Certificate Name is not empty");
                return;
            }
            certificateType = typeCertificateBindingSource.Current as TypeCertificate;
            certificateType.Ship_ID = frmMain.ship.Ship_ID;
            if (CertificateType_BLL.IsExits(certificateType))
            {
                e.Valid = false;
                view.FocusedColumn = view.Columns["NameType"];
                e.ErrorText = "Certificate Name is exits. ";
                view.SetColumnError(ColDocumentName, "Certificate Name is exits");
                return;
            }

        }
        // Thông báo lỗi nếu dữ liệu nhập vào không đúng
        private void gridView1_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            if (e.RowHandle == GridControl.NewItemRowHandle)
            {
                e.WindowCaption = "Input Error";
            }
            else
            {
                e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
                DialogResult dr = XtraMessageBox.Show(gridControl12.LookAndFeel, this, e.ErrorText + GridLocalizer.Active.GetLocalizedString(GridStringId.ColumnViewExceptionMessage), e.WindowCaption, MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (dr == DialogResult.No)
                {
                    e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.Ignore;
                    typeCertificateBindingSource.DataSource = CertificateType_BLL.GetAll(frmMain.ship.Ship_ID);
                    status = Status.Update;
                }
            }

        }
        // Đặt lại trạng thái update 
        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.RowHandle != GridControl.NewItemRowHandle)
            {
                status = Status.Update;
            }
        }

        private void gridControl12_EmbeddedNavigator_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
        {
            switch (e.Button.ButtonType)
            {
                case NavigatorButtonType.Remove:
                    DeleteDocument(e);
                    break;
            }
        }

    }
}